home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer: Getting Started / Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin / pc / mac / bonus / peter_le / macbinar / calccrc.a < prev    next >
Text File  |  1992-04-14  |  4KB  |  162 lines

  1.     macro
  2.     PUSH
  3.     move.l    &SYSLIST[1],-(sp)
  4.     endm
  5.         
  6.     macro
  7.     POP
  8.     move.l    (sp)+,&SYSLIST[1]
  9.     endm
  10.  
  11. magic    proc    export
  12.     dc.w    $0000,$1021,$2042,$3063,$4084,$50a5,$60c6,$70e7
  13.     dc.w    $8108,$9129,$a14a,$b16b,$c18c,$d1ad,$e1ce,$f1ef
  14.     dc.w    $1231,$0210,$3273,$2252,$52b5,$4294,$72f7,$62d6
  15.     dc.w    $9339,$8318,$b37b,$a35a,$d3bd,$c39c,$f3ff,$e3de
  16.     dc.w    $2462,$3443,$0420,$1401,$64e6,$74c7,$44a4,$5485
  17.     dc.w    $a56a,$b54b,$8528,$9509,$e5ee,$f5cf,$c5ac,$d58d
  18.     dc.w    $3653,$2672,$1611,$0630,$76d7,$66f6,$5695,$46b4
  19.     dc.w    $b75b,$a77a,$9719,$8738,$f7df,$e7fe,$d79d,$c7bc
  20.     dc.w    $48c4,$58e5,$6886,$78a7,$0840,$1861,$2802,$3823
  21.     dc.w    $c9cc,$d9ed,$e98e,$f9af,$8948,$9969,$a90a,$b92b
  22.     dc.w    $5af5,$4ad4,$7ab7,$6a96,$1a71,$0a50,$3a33,$2a12
  23.     dc.w    $dbfd,$cbdc,$fbbf,$eb9e,$9b79,$8b58,$bb3b,$ab1a
  24.     dc.w    $6ca6,$7c87,$4ce4,$5cc5,$2c22,$3c03,$0c60,$1c41
  25.     dc.w    $edae,$fd8f,$cdec,$ddcd,$ad2a,$bd0b,$8d68,$9d49
  26.     dc.w    $7e97,$6eb6,$5ed5,$4ef4,$3e13,$2e32,$1e51,$0e70
  27.     dc.w    $ff9f,$efbe,$dfdd,$cffc,$bf1b,$af3a,$9f59,$8f78
  28.     dc.w    $9188,$81a9,$b1ca,$a1eb,$d10c,$c12d,$f14e,$e16f
  29.     dc.w    $1080,$00a1,$30c2,$20e3,$5004,$4025,$7046,$6067
  30.     dc.w    $83b9,$9398,$a3fb,$b3da,$c33d,$d31c,$e37f,$f35e
  31.     dc.w    $02b1,$1290,$22f3,$32d2,$4235,$5214,$6277,$7256
  32.     dc.w    $b5ea,$a5cb,$95a8,$8589,$f56e,$e54f,$d52c,$c50d
  33.     dc.w    $34e2,$24c3,$14a0,$0481,$7466,$6447,$5424,$4405
  34.     dc.w    $a7db,$b7fa,$8799,$97b8,$e75f,$f77e,$c71d,$d73c
  35.     dc.w    $26d3,$36f2,$0691,$16b0,$6657,$7676,$4615,$5634
  36.     dc.w    $d94c,$c96d,$f90e,$e92f,$99c8,$89e9,$b98a,$a9ab
  37.     dc.w    $5844,$4865,$7806,$6827,$18c0,$08e1,$3882,$28a3
  38.     dc.w    $cb7d,$db5c,$eb3f,$fb1e,$8bf9,$9bd8,$abbb,$bb9a
  39.     dc.w    $4a75,$5a54,$6a37,$7a16,$0af1,$1ad0,$2ab3,$3a92
  40.     dc.w    $fd2e,$ed0f,$dd6c,$cd4d,$bdaa,$ad8b,$9de8,$8dc9
  41.     dc.w    $7c26,$6c07,$5c64,$4c45,$3ca2,$2c83,$1ce0,$0cc1
  42.     dc.w    $ef1f,$ff3e,$cf5d,$df7c,$af9b,$bfba,$8fd9,$9ff8
  43.     dc.w    $6e17,$7e36,$4e55,$5e74,$2e93,$3eb2,$0ed1,$1ef0
  44.     endp
  45.  
  46. CalcCRCStack    record    0
  47. Return    ds.l    1
  48. dummy    ds.b    1
  49. v    ds.b    1
  50. crcp    ds.l    1
  51.     endr
  52.  
  53. ; procedure CalcCRC(var crc:integer; v:integer);
  54. CalcCRC    proc    export
  55.     with    CalcCRCStack
  56.     
  57.     move.l    crcp(sp),a0
  58.     move.w    #0,d0
  59.     move.b    (a0),d0                ; crc high byte
  60.     add.w    d0,d0
  61.     lea    magic,a1
  62.     move.w    (a1,d0.w),d0
  63.     move.b    v(sp),d1
  64.     eor.b    d1,d0
  65.     move.b    1(a0),d1            ; crc low byte
  66.     lsl.w    #8,d1
  67.     eor.w    d1,d0
  68.     move.w    d0,(a0)    
  69.  
  70.     move.l    (sp),6(sp)
  71.     add.l    #6,sp
  72.     rts
  73.  
  74.     endp
  75.  
  76. ; procedure CalcMBCRC(var crc:integer; v:integer);
  77. CalcMBCRC    proc    export
  78.     with    CalcCRCStack
  79.     
  80.     move.l    crcp(sp),a0
  81.     move.w    #0,d0
  82.     move.b    (a0),d0                ; crc high byte
  83.     move.b    v(sp),d1
  84.     eor.b    d1,d0
  85.     add.w    d0,d0
  86.     lea    magic,a1
  87.     move.w    (a1,d0.w),d0
  88.     move.b    1(a0),d1            ; crc low byte
  89.     lsl.w    #8,d1
  90.     eor.w    d1,d0
  91.     move.w    d0,(a0)    
  92.  
  93.     move.l    (sp),6(sp)
  94.     add.l    #6,sp
  95.     rts
  96.  
  97.     endp
  98.  
  99. ; function GetMagic:magicPtr;
  100. GetMagic    proc    export
  101.     lea    magic,a0
  102.     move.l    a0,4(sp)
  103.     rts
  104.  
  105.     endp
  106.     
  107.     END
  108.     
  109. regspc    equ        16
  110. rtsoff    equ        regspc+0
  111. voff    equ        regspc+4
  112. crcoff    equ        regspc+6
  113.  
  114. ; procedure CalcCRC(var crc:integer; v:integer);
  115. ; @crc        @a0 = d0
  116. ; v            d1
  117. ; @rts
  118. OldCRC    proc    export
  119.     MOVEM.L    A0/D0-D2,-(SP)    ;Save all regs. except D0
  120.  
  121.     move.l    crcoff(sp),a0
  122.     move.w    (a0),d0
  123.     move.w    voff(sp),d1
  124.     
  125.     move.w    #7,d2
  126. loop
  127.     lsl.b    #1,d1
  128.     roxl.w    #1,d0
  129.     bcc        noxor
  130.     eor.w    #$1021,d0
  131. noxor
  132.     dbf        d2,loop
  133.     
  134.     move.w    d0,(a0)
  135.     
  136.     MOVEM.L    (SP)+,A0/D0-D2
  137.     move.l    (sp),6(sp)
  138.     add.l    #6,sp
  139.     RTS
  140.     endp
  141.     
  142.  
  143. procedure CalcCRC (v: integer);
  144.     var
  145.         temp: boolean;
  146.         i: integer;
  147. begin
  148.     for i := 1 to 8 do begin
  149.         temp := BAND(crc, $8000) <> 0;
  150.         crc := BOR(BSL(crc, 1), BSR(v, 7));
  151.         if temp then
  152.             crc := BXOR(crc, $1021);
  153.         v := BAND(BSL(v, 1), $FF);
  154.     end;
  155. end;
  156.  
  157. asm -wb "{active}"
  158. (evaluate "{active}" =~ /(?*):(?*)¿1.a/ )> dev:null
  159. (evaluate "{active}" =~ "/(?*)¿2.a/" )> dev:null
  160. link -sn CalcCRC="{¿1}" "{active}.o" -o "{¿2}"
  161. dumpcode "{¿2}"
  162.